package com.tc.report;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


/**
 * 报表字段对象。
 * @author shy
 *
 */
public class ReportField {
	/** 合计值的显示类型:0-合计值*/
	public final static String TOTAL_TYPE_SUM="0";
	/** 合计值的显示类型:1-计数值*/
	public final static String TOTAL_TYPE_CNT="1";
	/** 合计值的显示类型:2-平均值*/
	public final static String TOTAL_TYPE_AVG="2";
	
	/** 分类汇总显示类型:0-自动*/
	public final static String CLASSIFY_TOTAL_TYPE_DEFAULT="0";
	/** 分类汇总显示类型:1-无*/
	public final static String CLASSIFY_TOTAL_TYPE_NOTHING="1";
	/** 分类汇总显示类型:2-自定义*/
	public final static String CLASSIFY_TOTAL_TYPE_DEFINDE="2";
	
	/** 报表字段 */
	private String fieldName;
	/** 设置字段别名。用于显示报名标题名称。 */
	private String fieldAlias;
	/** 当前字段的前面一个字段。可以为空,如第一个字段。 */
	private String previousFieldName;
	/** 当前字段的后面一个字段。可以为空,如最后一个字段。 */
	private String nextFieldName;
	/** 用于设置该字段对应的字典数据。 */
	private Map<String,Object> fieldDict = new HashMap<String,Object>();
	/** 用于设置该字段是否需要显示合计值。 */
	private boolean isShowTotal = true;
	/** 用于设置合计值的显示类型:0-合计值,1-计数值   默认合计值*/
	private String totalValType=TOTAL_TYPE_SUM;
	/** 用于设置该字段的分类汇总类别 */
	private String classifyTotalType=CLASSIFY_TOTAL_TYPE_DEFAULT;
	/** 用于设置该字段是否设置自定义汇总 */
	private boolean isDefinde = false;
	/** 用于设置该字段设置自定义汇总函数列表  先不起用.*/
	private List<String> totalDefList = new ArrayList<String>();	
	
	
	
	public String getClassifyTotalType() {
		return classifyTotalType;
	}

	/**
	 * 初始化自定义分类汇总.
	 */
	public void initDefindeClassifyTotalType(){
		this.isDefinde = false;
		totalDefList = new ArrayList<String>();
	}

	public void setClassifyTotalType(String classifyTotalType) {
		this.classifyTotalType = classifyTotalType;
		if(CLASSIFY_TOTAL_TYPE_DEFAULT.equals(classifyTotalType)){
			this.isShowTotal = true;
			initDefindeClassifyTotalType();
		}else if(CLASSIFY_TOTAL_TYPE_NOTHING.equals(classifyTotalType)){
			this.isShowTotal = false;
			initDefindeClassifyTotalType();
		}else if(CLASSIFY_TOTAL_TYPE_DEFINDE.equals(classifyTotalType)){
			this.isShowTotal = true;
			this.isDefinde = true;
			totalDefList = new ArrayList<String>();
		}else{//其他设置为默认类型.
			setClassifyTotalType(CLASSIFY_TOTAL_TYPE_DEFAULT);
		}
	}


	public boolean isDefinde() {
		return isDefinde;
	}
	
	
	public void setDefinde(boolean isDefinde) {
		this.isDefinde = isDefinde;
		if(this.isDefinde){
			this.isShowTotal = false;
			this.classifyTotalType = CLASSIFY_TOTAL_TYPE_DEFINDE;
			totalDefList = new ArrayList<String>();
		}
	}
		
	public List<String> getTotalDefList() {
		return totalDefList;
	}


	public void setTotalDefList(List<String> totalDefList) {
		this.totalDefList = totalDefList;
	}


	public String getTotalValType() {
		return totalValType;
	}

	public void setTotalValType(String totalValType) {
		this.totalValType = totalValType;
	}

	public String getFieldName() {
		return fieldName;
	}

	public void setFieldName(String fieldName) {
		this.fieldName = fieldName;
	}

	public String getFieldAlias() {
		if (StringUtils.isBlank(fieldAlias) && StringUtils.isNotBlank(this.fieldName)) {
			return this.fieldName;
		}
		return fieldAlias;
	}
	/**
	 * 用于设置字段汇总别名的显示.
	 * @return
	 */
	public String getTotalFieldAlias(){
		String totalFieldAlias = "汇总";
		return totalFieldAlias;
	}
	
	/**
	 * 获取值区域字段的别名显示.
	 * @return
	 */
	public String getValFieldAlias(){
		String valFieldAlias=this.getValFieldAliasPrefix();
		if(StringUtils.isNotBlank(fieldAlias)){
			valFieldAlias = this.fieldAlias;
		}else{
			valFieldAlias+=this.fieldName;
		}		
		return valFieldAlias;
	}
	/**
	 * 获取值区域字段的显示标题前缀
	 * @return
	 */
	private String getValFieldAliasPrefix(){
		String prefix = "求和项:";
		if(TOTAL_TYPE_SUM.equals(this.totalValType)){
			prefix = "求和项:";
		}else if(TOTAL_TYPE_CNT.equals(this.totalValType)){
			prefix = "计数项:";
		}else if(TOTAL_TYPE_AVG.equals(this.totalValType)){
			prefix = "平均值项:";
		}
		return prefix;
	}
	

	public void setFieldAlias(String fieldAlias) {
		this.fieldAlias = fieldAlias;
	}

	

	public String getPreviousFieldName() {
		return previousFieldName;
	}

	public void setPreviousFieldName(String previousFieldName) {
		this.previousFieldName = previousFieldName;
	}

	public String getNextFieldName() {
		return nextFieldName;
	}

	public void setNextFieldName(String nextFieldName) {
		this.nextFieldName = nextFieldName;
	}

	public Map<String, Object> getFieldDict() {
		return fieldDict;
	}

	public void setFieldDict(Map<String, Object> fieldDict) {
		this.fieldDict = fieldDict;
	}

	public boolean isShowTotal() {
		return isShowTotal;
	}

	public void setShowTotal(boolean isShowTotal) {
		this.isShowTotal = isShowTotal;
		if(this.isShowTotal){//初始化自定义设置函数..
			this.isDefinde = false;
			totalDefList = new ArrayList<String>();
			this.classifyTotalType = CLASSIFY_TOTAL_TYPE_NOTHING;
		}
	}
	
}
